package scales.xml.impl
import scales.xml.{QName, AttributeQName, UnprefixedQName, Namespace, NoNamespaceQName, XmlVersion}
import scales.xml.parser.strategies.{MemoryOptimisationStrategy, OptimisationToken}
object NameCreators {
def eqn[Token <: OptimisationToken](uri: String,
localName: String,
qName: String, strategy : MemoryOptimisationStrategy[Token], token : Token): QName =
if (uri.length() == 0) {
strategy.noNamespaceQName(qName, token)
} else {
if (qName == localName) {
strategy.unprefixedQName(localName, uri, token)
} else {
val bits = qName.split(':')
strategy.prefixedQName(localName, uri, bits(0), token)
}
}
def aqn[Token <: OptimisationToken](uri: String,
localName: String,
qName: String, strategy : MemoryOptimisationStrategy[Token], token : Token): AttributeQName =
if (uri.length() == 0) {
strategy.noNamespaceQName(qName, token)
} else {
if (qName == localName) {
scales.utils.error("Should not have an attribute with a unprefixed namspace")
} else {
val bits = qName.split(':')
strategy.prefixedQName(localName, uri,bits(0), token)
}
}
}
trait QNameImplicits {
implicit def stringToNoNamespace( localOnly : String )(implicit ver : XmlVersion, fromParser: FromParser) = NoNamespaceQName(localOnly)
implicit def localStringToNSBuilder( local : String)(implicit ver : XmlVersion, fromParser: FromParser) = new StringToNSBuilder(local)
}
class StringToNSBuilder(local: String)(implicit ver : XmlVersion, fromParser: FromParser) {
def ::( namespace : String ) = if ((namespace eq null) || namespace == "") error("Namespace should not be non empty or null") else UnprefixedQName(local, Namespace(namespace))
def l(implicit ver : XmlVersion, fromParser : FromParser) = NoNamespaceQName(local)
def localOnly(implicit ver : XmlVersion, fromParser : FromParser) = NoNamespaceQName(local)
}